<?php

/**
 * profesorasesor actions.
 *
 * @package    atenea
 * @subpackage profesorasesor
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 2288 2006-10-02 15:22:13Z fabien $
 */
class profesorasesorActions extends autoprofesorasesorActions
{
	
  public function executeDepartamento()
  {
	  if ($this->getRequestParameter('ajax')=='1')
	  {
	  	$this->decanato = $this->getRequestParameter('decanato');
	  	
	  	$usuario = $this->getUser()->getAttribute('objusuario');
	  	
	  	if ($usuario)
	  	{
	  		$id = $usuario->getId();
	  	}
	  	else
	  	{
	  		$id = '';	
	  	}

		$obj_datopersonal = new DatoPersonal();
		$deptousuario = $obj_datopersonal->getDatotrabajoDepartamento($id);

		if ($deptousuario)
		{
			$this->departamentousuario = $deptousuario;
		}
		else
		{
			$this->departamentousuario = '';
		}
	  	
	  	$c1 = new Criteria();
		$c1->add(DepartamentoPeer::DECANATO_ID, $this->decanato);
		$obj_departamentos = DepartamentoPeer::doSelect($c1);
		
		$deptos = null;
		
		foreach ($obj_departamentos as $regdepartamentos)
		{
			if($regdepartamentos)
			{
				$deptos[$regdepartamentos->getId()] = $regdepartamentos->getNombreDepartamento();
			}
			else
			{
				$deptos[''] = 'Departamentos';
			}
		}

		if ($deptos == null)
		{
			$deptos[''] = 'Departamentos';
		}
		
		$this->departamentos = $deptos;
		
		if ($obj_departamentos == null)
		{
			$this->setFlash('notice', 'El Decanato seleccionado no posee Departamentos');
		}
	  }
  }
	
  public function executeIndex()
  {
    return $this->forward('profesorasesor', 'list');
  }

  public function executeAnterior()
  {
  		$usuario = $this->getUser()->getAttribute('objusuario');
		$id = $usuario->getId();
		
		$criterio = new Criteria();
		$criterio->add(AteneausuarioPeer::ID, $id);
		$obj_ateneausuario = AteneausuarioPeer::doSelectOne($criterio);
		
		if($obj_ateneausuario)
		{
			return $this->redirect('regusuario/edit?id='.$id);
		}
		else
		{
			return $this->forward('regusuario', 'edit');
		}
  }
  
  public function executeCreate()
  {
  	$this->getUser()->getAttributeHolder()->remove('objusuario');
  	$this->getUser()->getAttributeHolder()->remove('objusuario2');
    return $this->forward('regusuario', 'create');
  }
	
  protected function addFiltersCriteria($c)
  {
  	$c->add(RolPeer::DESCRIPCION, 'profesor asesor');
  	$c->addJoin(AteneausuarioPeer::ROL_ID, RolPeer::ID);
  	$c->addJoin(DatoPersonalPeer::USUARIO_ID, AteneausuarioPeer::ID);
  }
  
  public function executeList()
  {
  	$this->getUser()->getAttributeHolder()->remove('objusuario');
  	$this->getUser()->getAttributeHolder()->remove('objusuario2');
  	
  	$this->processSort();

    $this->processFilters();


    // pager
    $this->pager = new sfPropelPager('DatoPersonal', 5);
    $c = new Criteria();
    $this->addSortCriteria($c);
    $this->addFiltersCriteria($c);
    $this->pager->setCriteria($c);
    $this->pager->setPage($this->getRequestParameter('page', 1));
    $this->pager->init();
  }
  
  public function executeSave()
  {
    return $this->forward('profesorasesor', 'edit');
  }

  public function handleErrorEdit()
  {
    $this->preExecute();
    $this->dato_personal = $this->getDatoPersonalOrCreate();
    $this->updateDatoPersonalFromRequest();

    $this->labels = $this->getLabels();

    return sfView::SUCCESS;
  }

  protected function saveDatoPersonal($dato_personal)
  {
    $dato_personal->save();

  }

  protected function deleteDatoPersonal($dato_personal)
  {
    $dato_personal->delete();
  }

  protected function getDatoPersonalOrCreate($id = 'id')
  {
    if (!$this->getRequestParameter($id))
    {
      $dato_personal = new DatoPersonal();
    }
    else
    {
      $dato_personal = DatoPersonalPeer::retrieveByPk($this->getRequestParameter($id));

      $this->forward404Unless($dato_personal);
    }

    return $dato_personal;
  }

  protected function processFilters()
  {
  }

  protected function processSort()
  {
    if ($this->getRequestParameter('sort'))
    {
      $this->getUser()->setAttribute('sort', $this->getRequestParameter('sort'), 'sf_admin/dato_personal/sort');
      $this->getUser()->setAttribute('type', $this->getRequestParameter('type', 'asc'), 'sf_admin/dato_personal/sort');
    }

    if (!$this->getUser()->getAttribute('sort', null, 'sf_admin/dato_personal/sort'))
    {
    }
  }
  
  	public function executeRecibir()
	{
		$usuario = $this->getUser()->getAttribute('objusuario');

		$idusuario = $usuario->getId();
		$this->getUser()->setAttribute('objusuario',$usuario);
		
		$criterio = new Criteria();
		$criterio->add(DatoPersonalPeer::USUARIO_ID, $idusuario);
		$obj_datopersonal = DatoPersonalPeer::doSelectOne($criterio);
		
		if($obj_datopersonal)
		{
			return $this->redirect('profesorasesor/edit?id='.$obj_datopersonal->getId());
		}
		else
		{
			return $this->forward('profesorasesor', 'edit');
		}
	}
	
  protected function getDatoTrabajoOrCreate($id = 'id')
  {
  	$c = new Criteria();
	$c->add(DatoTrabajoPeer::USUARIO_ID, $id);
	$obj_datotrabajo = DatoTrabajoPeer::doSelectOne($c);

	if ($obj_datotrabajo)
	{
		$dato_trabajo = $obj_datotrabajo;
	}
	else
	{
    	$dato_trabajo = new DatoTrabajo();
	}  	

    return $dato_trabajo;
  }
  
  protected function updateDatoPersonalFromRequest($id = 'id')
  {
    $dato_personal = $this->getRequestParameter('dato_personal');

    if (isset($dato_personal['cedulapersonal']))
    {
      $this->dato_personal->setCedulapersonal($dato_personal['cedulapersonal']);
    }
    if (isset($dato_personal['nombre']))
    {
      $this->dato_personal->setNombre($dato_personal['nombre']);
    }
    if (isset($dato_personal['apellido']))
    {
      $this->dato_personal->setApellido($dato_personal['apellido']);
    }
    if (isset($dato_personal['direccion_hab']))
    {
      $this->dato_personal->setDireccionHab($dato_personal['direccion_hab']);
    }
    if (isset($dato_personal['telefono_hab']))
    {
      $this->dato_personal->setTelefonoHab($dato_personal['telefono_hab']);
    }
    if (isset($dato_personal['telefono_movil']))
    {
      $this->dato_personal->setTelefonoMovil($dato_personal['telefono_movil']);
    }
    if (isset($dato_personal['email']))
    {
      $this->dato_personal->setEmail($dato_personal['email']);
    }
    
    $this->dato_personal->setUsuarioId($id ? $id : null);
    
    /* ****************** Tabla Dato Trabajo ******************** */
	$this->dato_trabajo = $this->getDatoTrabajoOrCreate($id);
    
    if (isset($dato_personal['datotrabajo_decanato']))
    {
      $this->dato_trabajo->setDecanatoId($dato_personal['datotrabajo_decanato']);
    }
    if (isset($dato_personal['datotrabajo_departamento']))
    {
      $this->dato_trabajo->setDepartamentoId($dato_personal['datotrabajo_departamento']);
    }
    if (isset($dato_personal['datotrabajo_especialidad']))
    {
      $this->dato_trabajo->setEspecialidad($dato_personal['datotrabajo_especialidad']);
    }
    if (isset($dato_personal['datotrabajo_profesion']))
    {
      $this->dato_trabajo->setProfesion($dato_personal['datotrabajo_profesion']);
    }

    $this->dato_trabajo->setUsuarioId($id ? $id : null);
		
	$this->dato_trabajo->save();
  }
	
  public function executeEdit()
  {
    $this->dato_personal = $this->getDatoPersonalOrCreate();

    if ($this->getRequest()->getMethod() == sfRequest::POST)
    {
		$dato_personal = $this->getRequestParameter('dato_personal');
		
	    if (isset($dato_personal['cedulapersonal']))
	    {
	      $this->dato_personal->setCedulapersonal($dato_personal['cedulapersonal']);
	    }
	    
	    $cedula = $this->dato_personal->getCedulapersonal();
	
	    if ($cedula)
	    {    	
	    	$usuario = $this->getUser()->getAttribute('objusuario');

    		$this->getUser()->setAttribute('objusuario2',$usuario);
	    	
	    	$usuario = $this->getUser()->getAttribute('objusuario2');

    		$usuario->save();
    		$idusuario = $usuario->getId();
    		
	          $this->updateDatoPersonalFromRequest($idusuario);

		      $this->saveDatoPersonal($this->dato_personal);
		
		      $this->setFlash('notice', 'Your modifications have been saved');
		
		      if ($this->getRequestParameter('save_and_add'))
		      {
		        return $this->redirect('profesorasesor/create');
		      }
		      else if ($this->getRequestParameter('save_and_list'))
		      {
		        return $this->redirect('profesorasesor/list');
		      }
		      else
		      {
		        return $this->redirect('profesorasesor/edit?id='.$this->dato_personal->getId());
		      }
		}
        else
    	{
    		$usuario = $this->getUser()->getAttribute('objusuario');
    		$this->getUser()->setAttribute('objusuario2',$usuario);
    		$this->labels = $this->getLabels();
    	}
    }
    else
    {
      $this->labels = $this->getLabels();
    }
  }
  
  public function executeDelete()
  {
    $this->dato_personal = DatoPersonalPeer::retrieveByPk($this->getRequestParameter('id'));
    $this->forward404Unless($this->dato_personal);

    $idusuario = $this->dato_personal->getUsuarioId();

    $this->ateneausuario = AteneausuarioPeer::retrieveByPk($idusuario);
    $this->forward404Unless($this->ateneausuario);
    
    $c = new Criteria();
	$c->add(DatoTrabajoPeer::USUARIO_ID, $idusuario);
	$this->dato_trabajo = DatoTrabajoPeer::doSelectOne($c);

	$this->forward404Unless($this->dato_trabajo);
    
    try
    {
      $this->dato_trabajo->delete();
    }
    catch (PropelException $e)
    {
      $this->getRequest()->setError('delete', 'Could not delete the selected Ateneausuario. Make sure it does not have any associated items.');
      return $this->forward('profesorasesor', 'list');
    }
	
	try
    {
      $this->deleteDatoPersonal($this->dato_personal);
    }
    catch (PropelException $e)
    {
      $this->getRequest()->setError('delete', 'Could not delete the selected Dato personal. Make sure it does not have any associated items.');
      return $this->forward('profesorasesor', 'list');
    }
    
    try
    {
      $this->ateneausuario->delete();
    }
    catch (PropelException $e)
    {
      $this->getRequest()->setError('delete', 'Could not delete the selected Ateneausuario. Make sure it does not have any associated items.');
      return $this->forward('profesorasesor', 'list');
    }
    
    return $this->redirect('profesorasesor/list');
  }

  protected function addSortCriteria($c)
  {
    if ($sort_column = $this->getUser()->getAttribute('sort', null, 'sf_admin/dato_personal/sort'))
    {
      $sort_column = DatoPersonalPeer::translateFieldName($sort_column, BasePeer::TYPE_FIELDNAME, BasePeer::TYPE_COLNAME);
      if ($this->getUser()->getAttribute('type', null, 'sf_admin/dato_personal/sort') == 'asc')
      {
        $c->addAscendingOrderByColumn($sort_column);
      }
      else
      {
        $c->addDescendingOrderByColumn($sort_column);
      }
    }
  }

  protected function getLabels()
  {
    return array(
      'dato_personal{cedulapersonal}' => 'Cédula:',
      'dato_personal{nombre}' => 'Nombre:',
      'dato_personal{apellido}' => 'Apellido:',
      'dato_personal{direccion_hab}' => 'Dirección Hab.:',
      'dato_personal{telefono_hab}' => 'Teléfono Hab.:',
      'dato_personal{telefono_movil}' => 'Teléfono Móvil:',
      'dato_personal{email}' => 'Email:',
      'dato_personal{datotrabajo_decanato}' => 'Decanato:',
      'dato_personal{datotrabajo_departamento}' => 'Departamento:',
      'dato_personal{datotrabajo_profesion}' => 'Profesion:',
      'dato_personal{datotrabajo_especialidad}' => 'Especialidad:',
    );
  }
  
}
